#!/bin/bash
# run_mlx_api_server.sh
# 注：此脚本仅在 Apple Silicon (如 mbaM4) 环境下运行。
# 它负责启动 LLM API 服务，供主验证流水线远程调用。

set -e

REPO_DIR=$(dirname "$0")
cd "$REPO_DIR"

echo "==================================================="
echo "=== 启动 MLX 本地 LLM API 服务 (Apple Silicon) ==="
echo "==================================================="

LLM_VENV_DIR=".venv_mlx"
REQUIREMENTS_MLX="requirements_mlx.txt"
MODEL_PATH="./phi3-mini"
HOST="127.0.0.1" # 注：如果主验证流水线在其他机器上运行，请将此 IP 改为 0.0.0.0 并在 github_discovery_config.yaml 中配置对应 IP。
PORT="8000"

# 0. 确保 logs 目录存在
mkdir -p logs

# 1. 检查 Python 虚拟环境
if [ ! -d "$LLM_VENV_DIR" ]; then
    echo "🔍 创建 Python 虚拟环境 ($LLM_VENV_DIR)..."
    python3 -m venv "$LLM_VENV_DIR"
fi

echo "🔍 激活 Python 虚拟环境..."
source "$LLM_VENV_DIR/bin/activate"

echo "🔍 安装或更新 MLX API 服务依赖 ($REQUIREMENTS_MLX)..."
pip install --upgrade pip
pip install -r "$REQUIREMENTS_MLX"

echo "🚀 启动本地 MLX API 服务 (模型: $MODEL_PATH, 地址: $HOST:$PORT)..."
echo "日志将输出到 logs/mlx_api_server.log"
echo "若要停止服务，请在另一个终端使用 'pgrep -f api_server.py' 查找 PID，然后 'kill <PID>'。"
# 使用 exec 确保 python 进程替换掉当前 shell 进程，简化进程管理。
exec python3 api_server.py --model "$MODEL_PATH" --host "$HOST" --port "$PORT" > logs/mlx_api_server.log 2>&1
